package top.iwife;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.List;

/**
 * Author 张杰
 * CreateTime 2021/11/17
 * <p>
 * json的各种转换
 */
public class JsonUtils {
    /**
     * object转字节数组
     *
     * @param obj 对象
     * @return 字节数组
     */
    public static byte[] objToBytes(Object obj) {
        return JSON.toJSONBytes(obj);
    }

    /**
     * 字节数组转指定类对象
     *
     * @param bytes 字节数组
     * @param clazz 类
     * @param <T>   类
     * @return 类
     */
    public static <T> T bytesToObj(byte[] bytes, Class<T> clazz) {
        return JSON.parseObject(bytes, clazz);
    }

    /**
     * obj转字符串
     *
     * @param obj 对象
     * @return json字符串
     */
    public static String objToString(Object obj) {
        return JSONObject.toJSONString(obj);
    }

    /**
     * JSONArray 转 普通数组
     *
     * @param obj   JSONArray类型的数组
     * @param clazz 数组中的类型
     * @param <T>   数组中的类型
     * @return 普通List<T>数组
     */
    public static <T> List<T> toJavaList(Object obj, Class<T> clazz) {
        if (obj instanceof JSONArray && clazz != null) {
            return ((JSONArray) obj).toJavaList(clazz);
        }
        return JSONObject.parseArray(objToString(obj), clazz);
    }

    /**
     * JSONObject 转 普通类
     *
     * @param obj   JSONObject类型的对象
     * @param clazz 普通java类型
     * @param <T>   普通java类型
     * @return java类
     */
    public static <T> T toJavaObject(Object obj, Class<T> clazz) {
        if (obj instanceof JSONObject && clazz != null) {
            return ((JSONObject) obj).toJavaObject(clazz);
        }
        return JSONObject.parseObject(objToString(obj), clazz);
    }
}
